home *** CD-ROM | disk | FTP | other *** search
- /*
- * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
- * ALL RIGHTS RESERVED
- * Permission to use, copy, modify, and distribute this software for
- * any purpose and without fee is hereby granted, provided that the above
- * copyright notice appear in all copies and that both the copyright notice
- * and this permission notice appear in supporting documentation, and that
- * the name of Silicon Graphics, Inc. not be used in advertising
- * or publicity pertaining to distribution of the software without specific,
- * written prior permission.
- *
- * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
- * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
- * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
- * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
- * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
- * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
- * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
- * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
- * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * US Government Users Restricted Rights
- * Use, duplication, or disclosure by the Government is subject to
- * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- * (c)(1)(ii) of the Rights in Technical Data and Computer Software
- * clause at DFARS 252.227-7013 and/or in similar or successor
- * clauses in the FAR or the DOD or NASA FAR Supplement.
- * Unpublished-- rights reserved under the copyright laws of the
- * United States. Contractor/manufacturer is Silicon Graphics,
- * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
- #include <stdio.h>
- #include <math.h>
- #include <GL/gl.h>
- #include <GL/glu.h>
- #include "gl42ogl.h"
- #include "tk.h"
- #include "insect.h"
- #include "insectco.h"
-
- #define BLACK 0
-
- /* For ECLIPSE 8 bit machine */
- extern GLboolean is_8bit;
-
- GLuint screen,viewit,shadow,body,hip[6],thigh[6],shin[6],kneeball[6];
- GLuint body_shadow,hip_shadow,thigh_shadow,shin_shadow,kneeball_shadow;
-
- GLfloat k2[6][3];
- GLfloat k3[6][3];
- GLfloat b7[12][3];
- GLfloat b8[12][3];
- GLint scr[4][2];
-
- GLfloat b1[4][3] = {
- {
- R1 * SIN30 * -SIN15,
- R1 * SIN30 * COS15,
- R1 * COS30
- },
-
- {
- R1 * SIN30 * SIN15,
- R1 * SIN30 * COS15,
- R1 * COS30
- },
-
- {
- A2 * SIN30,
- A1,
- A2 * COS30
- },
-
- {
- -A2 * SIN30,
- A1,
- A2 * COS30
- }
- };
-
- GLfloat b4[4][3] = {
- {
- R1 * SIN30 * -SIN15,
- R1 * SIN30 * COS15,
- -R1 * COS30
- },
-
- {
- -A2 * SIN30,
- A1,
- -A2 * COS30
- },
-
- {
- A2 * SIN30,
- A1,
- -A2 * COS30
- },
-
- {
- R1 * SIN30 * SIN15,
- R1 * SIN30 * COS15,
- -R1 * COS30
- }
- };
-
- GLfloat b2[4][3] = {{
- R1 * SIN30 * -SIN45,
- R1 * SIN30 * COS45,
- R1 * COS30
- },
-
- {
- R1 * SIN30 * -SIN15,
- R1 * SIN30 * COS15,
- R1 * COS30
- },
-
- {
- -A2 * SIN30,
- A1,
- A2 * COS30
- },
-
- {
- (A2 * SIN30) * COS60 - A1 * SIN60,
- A1 * COS60 + (A2 * SIN30) * SIN60,
- A2 * COS30
- }
- };
-
- GLfloat b5[4][3] = {{
- R1 * SIN30 * -SIN45,
- R1 * SIN30 * COS45,
- -R1 * COS30
- },
-
- {
- (A2 * SIN30) * COS60 - A1 * SIN60,
- A1 * COS60 + (A2 * SIN30) * SIN60,
- -A2 * COS30
- },
-
- {
- -A2 * SIN30,
- A1,
- -A2 * COS30
- },
-
- {
- R1 * SIN30 * -SIN15,
- R1 * SIN30 * COS15,
- -R1 * COS30
- }
- };
-
- GLfloat b3[4][3] = {{
- (A2 * SIN30) * COS60 - A1 * SIN60,
- A1 * COS60 + (A2 * SIN30) * SIN60,
- A2 * COS30
- },
-
- {
- -A2 * SIN30,
- A1,
- A2 * COS30
- },
-
- {
- -A2,
- A1,
- 0
- },
-
- {
- (A2) * COS60 - A1 * SIN60,
- A1 * COS60 + (A2) * SIN60,
- 0
- }
- };
-
- GLfloat b6[4][3] = {{
- (A2 * SIN30) * COS60 - A1 * SIN60,
- A1 * COS60 + (A2 * SIN30) * SIN60,
- -A2 * COS30
- },
-
- {
- (A2) * COS60 - A1 * SIN60,
- A1 * COS60 + (A2) * SIN60,
- 0.0
- },
-
- {
- -A2,
- A1,
- 0.0
- },
-
- {
- -A2 * SIN30,
- A1,
- -A2 * COS30
- }
- };
-
- GLfloat h1[4][3] = {{
- A2, -A2, 0.0
- },
-
- {
- R2, 0.0, 0.0
- },
-
- {
- R2 * COS60,
- 0,
- R2 * SIN60
- },
-
- {
- A2 * COS60,
- -A2,
- A2 * SIN60
- }
-
- };
-
- GLfloat h2[4][3] = {{
- R2 * COS60,
- 0.0,
- R2 * SIN60
- },
-
- {
- R2, 0.0, 0.0
- },
-
- {
- A2, A2, 0.0
- },
-
- {
- A2 * COS60,
- A2,
- A2 * SIN60
- }
- };
-
- GLfloat h3[3][3] = {{
- A2, A2, 0.0
- },
-
- {
- 0.0, R2, 0.0
- },
-
- {
- A2 * COS60,
- A2,
- A2 * SIN60
- },
- };
-
- GLfloat t1[4][3] = {{
- -A2 * COS60,
- A2,
- A2 * SIN60
- },
-
- {
- A2 * COS60,
- A2,
- A2 * SIN60
- },
-
- {
- A2 * COS60,
- 1 - A2 * COS60,
- A2 * SIN60
- },
-
- {
- -A2 * COS60,
- 1 - A2 * COS60,
- A2 * SIN60
- }
- };
-
- GLfloat t2[3][3] = {{
- -A2 * COS60,
- A2,
- A2 * SIN60
- },
-
- {
- -A2 * COS60,
- 1 - A2 * COS60,
- A2 * SIN60
- },
-
- {
- -A2,
- A2,
- 0.0
- }
- };
-
- GLfloat t6[3][3] = {{
- -A2 * COS60,
- A2,
- -A2 * SIN60
- },
-
- {
- -A2,
- A2,
- 0.0
- },
-
- {
- -A2 * COS60,
- 1 - A2,
- 0.0
- }
-
- };
-
- GLfloat t3[3][3] = {{
- A2 * COS60,
- A2,
- A2 * SIN60
- },
-
- {
- A2,
- A2,
- 0.0
- },
-
- {
- A2 * COS60,
- 1 - A2 * COS60,
- A2 * SIN60
- }
- };
-
- GLfloat t7[3][3] = {{
- A2 * COS60,
- A2,
- -A2 * SIN60
- },
-
- {
- A2 * COS60,
- 1 - A2,
- 0.0
- },
-
- {
- A2,
- A2,
- 0.0
- }
- };
-
- GLfloat t4[3][3] = {{
- -A2 * COS60,
- 1.0 - A2 * COS60,
- A2 * SIN60
- },
-
- {
- -A2 * COS60,
- 1.0 - A2,
- 0.0
- },
-
- {
- -A2,
- A2,
- 0.0
- }
- };
-
- GLfloat t5[3][3] = {{
- A2 * COS60,
- 1.0 - A2 * COS60,
- A2 * SIN60
- },
-
- {
- A2,
- A2,
- 0.0
- },
-
- {
- A2 * COS60,
- 1 - A2,
- 0.0
- }
- };
-
- GLfloat t8[4][3] = {{
- A2 * COS60,
- A2,
- -A2 * SIN60
- },
-
- {
- -A2 * COS60,
- A2,
- -A2 * SIN60
- },
-
- {
- -A2 * COS60,
- 1 - A2,
- 0.0
- },
-
- {
- A2 * COS60,
- 1 - A2,
- 0.0
- }
- };
-
- GLfloat s1[4][3] = {{
- A2 * COS60,
- -A2 * COS60,
- -A2 * SIN60
- },
-
- {
- A2 * COS60 * 0.4,
- A2 * COS60 - 2.0,
- -A2 * SIN60 * 0.4
- },
-
- {
- -A2 * COS60 * 0.4,
- A2 * COS60 - 2.0,
- -A2 * SIN60 * 0.4
- },
-
- {
- -A2 * COS60,
- -A2 * COS60,
- -A2 * SIN60
- }
-
- };
-
- GLfloat s2[4][3] = {{
- A2 * COS60,
- -A2 * COS60,
- -A2 * SIN60
- },
-
- {
- A2 * COS60,
- -A2,
- 0.0
- },
-
- {
- A2 * COS60 * 0.4,
- -2.0,
- 0.0
- },
-
- {
- A2 * COS60 * 0.4,
- A2 * COS60 - 2.0,
- -A2 * SIN60 * 0.4
- }
-
- };
-
- GLfloat s3[4][3] = {{
- -A2 * COS60,
- -A2 * COS60,
- -A2 * SIN60
- },
-
- {
- -A2 * COS60 * 0.4,
- A2 * COS60 - 2.0,
- -A2 * SIN60 * 0.4
- },
-
- {
- -A2 * COS60 * 0.4,
- -2.0,
- 0.0
- },
-
- {
- -A2 * COS60,
- -A2,
- 0.0
- }
-
- };
-
- GLfloat s4[4][3] = {{
- A2 * COS60,
- -A2,
- 0.0
- },
-
- {
- -A2 * COS60,
- -A2,
- 0.0
- },
-
- {
- -A2 * COS60 * 0.4,
- -2.0,
- 0.0
- },
-
- {
- A2 * COS60 * 0.4,
- -2.0,
- 0.0
- }
-
- };
-
- GLfloat s5[4][3] = {{
- A2 * COS60 * 0.4,
- -2.0,
- 0.0
- },
-
- {
- -A2 * COS60 * 0.4,
- -2.0,
- 0.0
- },
-
- {
- -A2 * COS60 * 0.4,
- A2 * COS60 - 2.0,
- -A2 * SIN60 * 0.4
- },
-
- {
- A2 * COS60 * 0.4,
- A2 * COS60 - 2.0,
- -A2 * SIN60 * 0.4
- }
- };
-
- GLfloat k1[4][3] = {{
- -A2 * COS60,
- 1.0 - A2 * COS60,
- A2 * SIN60
- },
-
- {
- A2 * COS60,
- 1.0 - A2 * COS60,
- A2 * SIN60
- },
-
- {
- A2 * COS60,
- 1.0 + A2 * COS60,
- A2 * SIN60
- },
-
- {
- -A2 * COS60,
- 1.0 + A2 * COS60,
- A2 * SIN60
- }
- };
-
- /* make display list objects
- screen -- for checkerboard floor
- shadow -- matrix to project insect onto flat surface
- viewit -- viewing transformation
- and various parts of the body and their shadows
- */
-
- void
- doViewit (void) {
- /*
- glFrustum (-8.0, 8.0, -8.0 * 0.75, 8.0 * 0.75, 10.0, 135.0);
- guPerspective (viewitFOV, viewitASPECT, 0.01, 131072.);
- */
- glRotatef (ctheta/10, 1, 0, 0);
- glRotatef (cphi/10, 0, 0, 1);
- glTranslatef (cx, cy, cz);
- }
-
-
-
- void
- createobjects (void) {
- int i,
- j,
- k;
-
- screen = glGenLists(32);
- if (screen == 0) tkQuit();
-
- shadow = screen + 1;
- body = screen + 2;
- body_shadow = screen + 3;
- /* hip [4..9]
- * thigh [10..15]
- * knee [16..21]
- * shin [22..27]
- */
- hip[0] = screen + 4;
- thigh[0] = screen + 10;
- kneeball[0] = screen + 16;
- shin[0] = screen + 22;
- hip_shadow = screen + 28;
- thigh_shadow = screen + 29;
- kneeball_shadow = screen + 30;
- shin_shadow = screen + 31;
-
-
-
- glNewList (screen, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- /* Changed for ECLIPSE 8 bit machine */
- if (is_8bit)
- glIndexi (ECLIPSE8_GRID);
- else
- glIndexi (GRID);
-
- k = 1;
- for (i = -8; i < 7; i++)
- for (j = -8; j < 7; j++) {
- if (k == 0) {
- scr[0][0] = i * 3;
- scr[0][1] = j * 3;
- scr[1][0] = (i + 1) * 3;
- scr[1][1] = j * 3;
- scr[2][0] = (i + 1) * 3;
- scr[2][1] = (j + 1) * 3;
- scr[3][0] = i * 3;
- scr[3][1] = (j + 1) * 3;
- polf2i (4, scr);
- }
- k = 1 - k;
- }
- glEndList ();
-
-
- glNewList (shadow, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- {
- float sx,
- sy,
- sz;
- GLfloat mshadow[16];
- sx = -1.0;
- sy = -1.0;
- sz = 1.0;
- gl_IdentifyMatrix (mshadow);
- /*
- mshadow[2][0] = -sx / sz;
- mshadow[2][1] = -sy / sz;
- mshadow[2][2] = 0.;
- */
- mshadow[8] = -sx / sz;
- mshadow[9] = -sy / sz;
- mshadow[10] = 0;
- glMultMatrixf (mshadow);
- }
- glIndexi (BLACK);
- glEndList ();
-
- for (i = 0; i < 12; i++) {
- b7[i][2] = R1 * SIN60;
- b7[i][0] = R1 * COS60 * cos ((float) i * (PI / 6.0) + (PI / 12.0));
- b7[i][1] = R1 * COS60 * sin ((float) i * (PI / 6.0) + (PI / 12.0));
- b8[11 - i][2] = -R1 * SIN60;
- b8[11 - i][0] = R1 * COS60 * cos ((float) i * (PI / 6.0) + (PI / 12.0));
- b8[11 - i][1] = R1 * COS60 * sin ((float) i * (PI / 6.0) + (PI / 12.0));
- }
-
- for (i = 0; i < 6; i++) {
- k2[i][0] = A2 * COS60;
- k2[i][1] = A2 * cos ((float) i * (PI / 3.0)) + 1.0;
- k2[i][2] = A2 * sin ((float) i * (PI / 3.0));
- k3[5 - i][0] = -A2 * COS60;
- k3[5 - i][1] = A2 * cos ((float) i * (PI / 3.0)) + 1.0;
- k3[5 - i][2] = A2 * sin ((float) i * (PI / 3.0));
- }
-
- glNewList (body, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
- glEnable (GL_CULL_FACE);
-
- getpolycolor (0, b7);
- polf (12, b7);
- getpolycolor (0, b8);
- polf (12, b8);
- getpolycolor (0, b1);
- polf (4, b1);
- getpolycolor (0, b2);
- polf (4, b2);
- getpolycolor (0, b3);
- polf (4, b3);
- getpolycolor (0, b4);
- polf (4, b4);
- getpolycolor (0, b5);
- polf (4, b5);
- getpolycolor (0, b6);
- polf (4, b6);
- for (i = 0; i < 5; i++) {
- rotate60 ('z', 4, b1);
- rotate60 ('z', 4, b2);
- rotate60 ('z', 4, b3);
- rotate60 ('z', 4, b4);
- rotate60 ('z', 4, b5);
- rotate60 ('z', 4, b6);
- getpolycolor (0, b1);
- polf (4, b1);
- getpolycolor (0, b2);
- polf (4, b2);
- getpolycolor (0, b3);
- polf (4, b3);
- getpolycolor (0, b4);
- polf (4, b4);
- getpolycolor (0, b5);
- polf (4, b5);
- getpolycolor (0, b6);
- polf (4, b6);
- }
-
- glDisable (GL_CULL_FACE);
-
-
- glEndList ();
-
- glNewList (body_shadow, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- glIndexi (SHADOW_COLOR);
- if (lit (3, b7))
- polf (12, b7);
- if (lit (3, b1))
- polf (4, b1);
- if (lit (3, b2))
- polf (4, b2);
- if (lit (3, b3))
- polf (4, b3);
- if (lit (3, b4))
- polf (4, b4);
- if (lit (3, b5))
- polf (4, b5);
- if (lit (3, b6))
- polf (4, b6);
- for (i = 0; i < 5; i++) {
- rotate60 ('z', 4, b1);
- rotate60 ('z', 4, b2);
- rotate60 ('z', 4, b3);
- rotate60 ('z', 4, b4);
- rotate60 ('z', 4, b5);
- rotate60 ('z', 4, b6);
- if (lit (3, b1))
- polf (4, b1);
- if (lit (3, b2))
- polf (4, b2);
- if (lit (3, b3))
- polf (4, b3);
- if (lit (3, b4))
- polf (4, b4);
- if (lit (3, b5))
- polf (4, b5);
- if (lit (3, b6))
- polf (4, b6);
- }
- glEndList ();
-
- for (j = 0; j < 6; j++) {
- hip[j] = hip[0] + j;
- glNewList (hip[j], GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- glEnable (GL_CULL_FACE);
-
- getpolycolor (1, h1);
- polf (4, h1);
- getpolycolor (1, h2);
- polf (4, h2);
- getpolycolor (1, h3);
- polf (3, h3);
- for (i = 0; i < 5; i++) {
- rotate60 ('y', 4, h1);
- rotate60 ('y', 4, h2);
- rotate60 ('y', 3, h3);
- getpolycolor (1, h1);
- polf (4, h1);
- getpolycolor (1, h2);
- polf (4, h2);
- getpolycolor (1, h3);
- polf (3, h3);
- }
- phi += PI / 3.0;
- getlightvector ();
-
- glDisable (GL_CULL_FACE);
-
-
- glEndList ();
- }
-
- glNewList (hip_shadow, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- /*glEnable (GL_CULL_FACE);*/
- glIndexi (SHADOW_COLOR);
- polf (4, h1);
- polf (4, h2);
- polf (3, h3);
- for (i = 0; i < 5; i++) {
- rotate60 ('y', 4, h1);
- rotate60 ('y', 4, h2);
- rotate60 ('y', 3, h3);
- polf (4, h1);
- polf (4, h2);
- polf (3, h3);
- }
- /*glDisable (GL_CULL_FACE);*/
- glEndList ();
-
- phi = 0.0;
- theta = PI / 4.0;
- getlightvector ();
- for (j = 0; j < 6; j++) {
- thigh[j] = thigh[0] + j;
- glNewList (thigh[j], GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- glEnable (GL_CULL_FACE);
-
-
- getpolycolor (2, t1);
- polf (4, t1);
- getpolycolor (2, t2);
- polf (3, t2);
- getpolycolor (2, t3);
- polf (3, t3);
- getpolycolor (2, t4);
- polf (3, t4);
- getpolycolor (2, t5);
- polf (3, t5);
- getpolycolor (2, t6);
- polf (3, t6);
- getpolycolor (2, t7);
- polf (3, t7);
- getpolycolor (2, t8);
- polf (4, t8);
-
- glDisable (GL_CULL_FACE);
-
-
- glEndList ();
- kneeball[j] = kneeball[0] + j;
- glNewList (kneeball[j], GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- glEnable (GL_CULL_FACE);
-
-
- getpolycolor (3, k1);
- polf (4, k1);
- for (k = 0; k < 4; k++)
- k1[k][1] -= 1.0;
- rotate60 ('x', 4, k1);
- for (k = 0; k < 4; k++)
- k1[k][1] += 1.0;
- for (i = 0; i < 5; i++) {
- if (i != 0) {
- getpolycolor (3, k1);
- polf (4, k1);
- }
- for (k = 0; k < 4; k++)
- k1[k][1] -= 1.0;
- rotate60 ('x', 4, k1);
- for (k = 0; k < 4; k++)
- k1[k][1] += 1.0;
- }
- getpolycolor (3, k2);
- polf (6, k2);
- getpolycolor (3, k3);
- polf (6, k3);
-
-
- glDisable (GL_CULL_FACE);
-
-
- glEndList ();
- shin[j] = shin[0] + j;
- glNewList (shin[j], GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- glEnable (GL_CULL_FACE);
-
-
- getpolycolor (4, s1);
- polf (4, s1);
- getpolycolor (4, s2);
- polf (4, s2);
- getpolycolor (4, s3);
- polf (4, s3);
- getpolycolor (4, s4);
- polf (4, s4);
- getpolycolor (4, s5);
- polf (4, s5);
-
-
- glDisable (GL_CULL_FACE);
-
-
- glEndList ();
- theta -= PI / 3.0;
- getlightvector ();
- }
- glNewList (thigh_shadow, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- /*glEnable (GL_CULL_FACE);*/
- glIndexi (SHADOW_COLOR);
- polf (4, t1);
- polf (3, t2);
- polf (3, t3);
- polf (3, t4);
- polf (3, t5);
- polf (3, t6);
- polf (3, t7);
- polf (4, t8);
- /*glDisable (GL_CULL_FACE);*/
- glEndList ();
- glNewList (kneeball_shadow, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- /*glEnable (GL_CULL_FACE);*/
- glIndexi (SHADOW_COLOR);
- polf (4, k1);
- for (k = 0; k < 4; k++)
- k1[k][1] -= 1.0;
- rotate60 ('x', 4, k1);
- for (k = 0; k < 4; k++)
- k1[k][1] += 1.0;
- for (i = 0; i < 5; i++) {
- if (i != 0) {
- polf (4, k1);
- }
- for (k = 0; k < 4; k++)
- k1[k][1] -= 1.0;
- rotate60 ('x', 4, k1);
- for (k = 0; k < 4; k++)
- k1[k][1] += 1.0;
- }
- polf (6, k2);
- polf (6, k3);
- /*glDisable (GL_CULL_FACE);*/
- glEndList ();
- glNewList (shin_shadow, GL_COMPILE);
-
- glShadeModel(GL_FLAT);
-
- /*glEnable (GL_CULL_FACE);*/
- glIndexi (SHADOW_COLOR);
- polf (4, s1);
- polf (4, s2);
- polf (4, s3);
- polf (4, s4);
- polf (4, s5);
- /*glDisable (GL_CULL_FACE);*/
- glEndList ();
-
- }
-